Asynchronous Active Record migrations
Spotifyのエンジニアによる記事
デプロイの一環としてマイグレーションを走らせるアプローチの課題
マイグレーション失敗時にデプロイを取り消すかの判断が難しい
利用しているデータベースが複数ある場合それぞれのデータベースにマイグレーションを適用しなければならなくなる
マイグレーションに時間がかかると(数時間)、その間デプロイを完了できなくなる
非同期マイグレーション
「デプロイが終わってから最終的に適用する」
ohbarye.icon デプロイするコードは互換性があることを保証する
「制御は人間が行う」
Shopifyならではの理由
Shopifyでは数百にのぼるデータベースシャーディングを扱っており、スキーマ変更のたびにシャーディングひとつひとつでマイグレーションを実行しなければなりません。マイグレーション手順がデプロイスクリプトの一部に組み込まれていると、リリースプロセスがぐらついてしまうでしょう。Shopifyでは代わりに、リリースの完了後に最終的に提供される「非同期マイグレーション」を用いています。非同期マイグレーションは、Shopifyが誇る1日50回を超えるリリースを支える重要な機能のひとつです。